package com.investment.advisor.repository;

import com.investment.advisor.entity.Tag;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface TagRepository extends JpaRepository<Tag, Long> {

    // 根据标签名称查找
    Optional<Tag> findByName(String name);

    // 根据标签分类查找
    List<Tag> findByCategory(String category);

    // 根据名称模糊查询
    List<Tag> findByNameContaining(String name);

    // 自定义查询：查找使用次数最多的标签（按基金数量降序）
    @Query("SELECT t, COUNT(f) as fundCount FROM Tag t LEFT JOIN t.funds f GROUP BY t ORDER BY fundCount DESC")
    List<Object[]> findTagsOrderByUsageDesc();

    // 自定义查询：查找特定基金的所有标签
    @Query("SELECT t FROM Tag t JOIN t.funds f WHERE f.id = ?1")
    List<Tag> findByFundId(Long fundId);

    // 自定义查询：查找特定基金的所有标签
    @Query("SELECT t FROM Tag t JOIN t.funds f WHERE f.code = ?1")
    List<Tag> findByFundCode(String fundCode);
} 